package de.pdbm.swt.aufgabe5;

import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.LinkedList;
import java.util.List;

/**
*
* @author Hendrik Bammel & Marc von der Ohe
* @version 1.0
*
*/

public class Provisionsberechnung {
	private static final BigDecimal ZEHNPROZENT = new BigDecimal(0.1);

	/**
	 * Mehthode UmsatzUndProvision
	 *@param mitarbeiter Mitarbeiter
	 *@throws ClassNotFoundException ClassNotFoundException
	 *@throws IOException IOException
	 *@return upRueckgabe
	 */
	
	public static UmsatzUndProvision getUmsatzUndProvision(Mitarbeiter mitarbeiter) 
			throws ClassNotFoundException, IOException {
		
		UmsatzUndProvision upRueckgabe = postorder(mitarbeiter);
		upRueckgabe.provision = upRueckgabe.provision.setScale(2, RoundingMode.HALF_UP );
		return upRueckgabe;
	}
	
	private static UmsatzUndProvision postorder(Mitarbeiter mitarbeiter) {
		UmsatzUndProvision upRekursion = new UmsatzUndProvision();
		List<UmsatzUndProvision> liste = new LinkedList<UmsatzUndProvision>();
		
		for (int i = 0; i < mitarbeiter.getMitarbeiter().size(); i++) {
			liste.add(postorder(mitarbeiter.getMitarbeiter().get(i)));
		}
		
		while (liste.size() > 0) {
			upRekursion.provision = 
					upRekursion.provision.add(liste.get(0).provision.multiply(ZEHNPROZENT));
			upRekursion.umsatz = upRekursion.umsatz.add(liste.remove(0).umsatz);
		}
		
		upRekursion.umsatz = upRekursion.umsatz.add(mitarbeiter.getUmsatz());
		upRekursion.provision = 
				upRekursion.provision.add(mitarbeiter.getUmsatz().multiply(ZEHNPROZENT));
		
		return upRekursion;
	}
}